package com.xci.core.helper;

import cn.hutool.core.io.FileUtil;
import com.xci.core.internal.Const;
import org.apache.commons.codec.digest.DigestUtils;

import java.io.File;

/**
 * 文件操作帮助类
 * @author 吕艳阳
 */
public class FileHelper {

    /**
     * 构造根目录文件对象
     * @param path 项目根目录
     */
    public static File buildRootFile(String path) {
        if (Helper.isBlank(path)) {
            return new File(Const.EMPTY);
        }
        return new File(new File(Const.EMPTY).getAbsolutePath() + path);
    }

    /**
     * 构造根目录文件对象
     * @param path 项目根目录
     */
    public static String buildRootFilePath(String path) {
        if (Helper.isBlank(path)) {
            return new File(Const.EMPTY).toString();
        }
        return new File(Const.EMPTY).getAbsolutePath() + path;
    }

    /**
     * 读取文件检测 md5
     * @param rootPath 应用根路径
     * @param md5      配置文件 Md5值,如果配置文件的 md5值与指定的 md5相同则返回空字符串
     * @return 读取成功返回文件内容, 否则返回空字符串
     */
    public static String readFileByMd5(String rootPath, String md5) {
        return readFileByMd5(FileHelper.buildRootFile(rootPath), md5);
    }

    /**
     * 读取文件检测 md5
     * @param file 路径
     * @param md5  配置文件 Md5值,如果配置文件的 md5值与指定的 md5相同则返回空字符串
     * @return 读取成功返回文件内容, 否则返回空字符串
     */
    public static String readFileByMd5(File file, String md5) {
        if (file.exists()) {
            String setting = FileUtil.readUtf8String(file);
            if (Helper.isNotBlank(md5) && DigestUtils.md5Hex(setting).equalsIgnoreCase(md5)) {
                return Const.EMPTY;
            }
            return setting;
        }
        return Const.EMPTY;
    }

    /**
     * 写入文件
     * @param rootPath 应用根路径
     * @param content  写入的内容
     * @return 返回写入的文件
     */
    public static File writeFileByUtf8(String rootPath, String content) {
        File file = FileHelper.buildRootFile(rootPath);
        FileUtil.mkParentDirs(file);
        return FileUtil.writeUtf8String(content, file);
    }

    /**
     * 删除文件
     * @param rootPath 应用根路径
     * @return 删除成功返回 true
     */
    public static boolean deleteFile(String rootPath) {
        File file = FileHelper.buildRootFile(rootPath);
        return FileUtil.del(file);
    }
}